// 给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。

// 岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

// 此外，你可以假设该网格的四条边均被水包围。

/**
 * @param {character[][]} grid
 * @return {number}
 */
// var numIslands = function(grid) {
//   let count = 0;
//   for (let i = 0; i < grid.length; i++) {   // 每一行
//     for (let j = 0; j < grid[0].length; j++) {   // 每一列
//       if (grid[i][j] === '1') {  // 如果是陆地
//         count++;  // 岛屿数量加1
//         dfs(grid, i, j);  // 广度优先搜索
//       }
//     }
//   }
//   return count;
// };
// function dfs(grid, i, j) {
//   if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] !== '1') {  // 如果不是陆地，直接返回
//     return;
//   }
//   grid[i][j] = '0';
//   dfs(grid, i + 1, j);  // 下
//   dfs(grid, i - 1, j);  // 上
//   dfs(grid, i, j + 1);  // 右
//   dfs(grid, i, j - 1);   // 左
// }

// console.log(numIslands([
//   ['1', '1', '1', '1', '0'],
//   ['1', '1', '0', '1', '0'],
//   ['1', '1', '0', '0', '0'],
//   ['0', '0', '0', '0', '0']
// ]));

var numIslands = function (grid) {
    let count = 0;
    for (let i = 0; i < grid.length; i++) {
        for (let j = 0; j < grid[0].length; j++) {
            if (grid[i][j] === "1") {
                count += 1;   
                dfs(grid, i, j)
            }

        }
    }
    return count;
  };
function dfs(grid, i, j) {
    if (i < 0 || j <0 || i >= grid.length || j >= grid[i].length || grid[i][j] === "0") return;   // 如果不是陆地，直接返回
    grid[i][j] = '0';//!
    dfs(grid, i-1, j)
    dfs(grid, i, j-1)
    dfs(grid, i+1, j)
    dfs(grid, i, j+1)
}
  console.log(numIslands([
    ['1', '1', '1', '1', '0'],
    ['1', '1', '0', '1', '0'],
    ['1', '1', '0', '0', '0'],
    ['0', '0', '0', '0', '0']
  ]));
  